/**
 * 网页对话框
 */
function HTMLDialog(args) {
	// 判断是否为IE浏览器
	this.isIE = window.ActiveXObject;
	// 遮罩层对象
	this.ol = null;
	// 对话框对象
	this.d = null;
	// 事件监听器
	this.lns = {};

	// 对话框基本属性
	this.title = 'hello, world!';
	this.content = null;
	this.width = 300;
	this.height = 200;
	this.model = false;
	this.life = -1;
	this.hasTitle = true;
	this.hasButtons = true;

	/**
	 * 初始化属性
	 */
	this.initProps = function(props) {
		if(!props) return;

		if(props.title)
			this.title = props.title;
		if(props.content)
			this.content = props.content;
		if(props.width)
			this.width = props.width;
		if(props.height)
			this.height = props.height;
		if(props.life)
			this.life = props.life;
		if(props.model != null)
			this.model = props.model;
		if(props.hasTitle != null)
			this.hasTitle = props.hasTitle;
		if(props.hasButtons != null)
			this.hasButtons = props.hasButtons;
	};
	this.initProps(args);

	/**
	 * 显示对话框
	 */
	this.show = function() {
		var dlgObj = this;
		var b = document.body;

		// 为模态对话框添加背景
		if(this.model) {
			this.o = $('<div class="dlg-ol"></div>').appendTo(b);
			if(this.isIE) this.o.addClass('dlg-ol-ie');
			this.o.show();
		}

		// 构造对话框
		this.d = $('<div class="dlg"></div>').appendTo(b).width(this.width);

		// 对话框标题
		if(this.hasTitle) {
			$('<div class="ttl"></div>').html(this.title).appendTo(this.d);
		}

		// 对话框内容
		var bdy = $('<div class="bdy"></div>').appendTo(this.d);
		if(this.content != null) {
			bdy.html($(this.content).html());
		}

		// 对话框按钮
		if(this.hasButtons) {
			var bar = $('<div class="bar"></div>').appendTo(this.d);
			var okBtn = $('<button>确定</button>').appendTo(bar).click(function(evt){
				dlgObj.dispatch('ok');
				dlgObj.close();
			});
			var cancleBtn = $('<button>取消</button>').appendTo(bar).click(function(evt){
				dlgObj.dispatch('cancel');
				dlgObj.close();
			});
		}

		// 设置对话框居中
		this.d.css({
			'top' : '50%', 
			'left' : '50%',  
			'marginLeft' : (0 - this.width / 2) + 'px',
			'marginTop' : (0 - this.d.height() / 2) + 'px'
		});
		if(!this.isIE) {
			this.d.css('position', 'fixed');
		}

		// 调度显示事件
		this.dispatch('show');

		// 监听esc键
		$(document).keydown(function(e){
			// 处理ESC键的事件
			if(e.keyCode == 27) {
				dlgObj.close();
			}
		});

		// 自动关闭设置
		if(this.life > 0) {
			window.setTimeout(function(){
				dlgObj.close();
			}, this.life);
		}
	};

	/**
	 * 关闭对话框
	 */
	this.close = function() {
		this.d.remove();
		if(this.o){
			this.o.remove();
		}
	};

	/**
	 * 为事件绑定响应函数
	 */
	this.bind = function(evt, func) {
		if(evt == null) return;

		var hdls = this.lns[evt];
		if(hdls == null)
			hdls = [];
		hdls.push(func);
		this.lns[evt] = hdls;
	}

	/**
	 * 私有函数：调用事件监听器
	 */
	this.dispatch = function(evt) {
		if(evt == null) return;

		var hdls = this.lns[evt];
		for(var i=0; hdls && i<hdls.length; i++) {
			var hdl = hdls[i];
			if(hdl.constructor == Function) {
				hdl.call(this);
			} else if(hdl.constructor == String) {
				var fn = function() {
					eval(hdl);
				};
				fn.call(this);
			}
		}
	}
}